package com.meatball.iot.driver.envmonitoring.data.document

import cn.hutool.core.date.DateTime
import cn.hutool.core.date.DateUnit
import cn.hutool.core.date.DateUtil
import com.meatball.iot.driver.envmonitoring.enums.CoordinateTypeEnum
import com.meatball.iot.driver.envmonitoring.enums.WindDirectionAngleEnum
import org.springframework.data.annotation.Id
import org.springframework.data.mongodb.core.mapping.Document

/**
 * TODO
 *
 * @property deviceId 网络设备编号
 * @property coordinateType 坐标类型
 * @property lat 纬度
 * @property lng 经度
 * @property relayStatus 继电器状态 二进制字符串。例如01000000 表示第二位继电器闭合，其余断开
 * @property windSpeedValue 风速：模拟量 2 系数 0.1 单位 m/s 量程 0-70m/s
 * @property windPowerOutput 风力：模拟量 1 系数 1 单位无  0-12 级
 * @property windDirectionAngle 风向：模拟量 2 系数 1 单位无 量程 0-7 范围 0-7 代表北风~西北风
 * @property windDirectionAngle360 风向 360：模拟量 1 系数 1 单位度 量程 0-359 度
 * @property airTemperatureValue 空气温度：模拟量 1 系数 0.1 单位℃ 量程 0%RH~99%RH
 * @property airHumidityValue 空气湿度：模拟量 2 系数 0.1 单位%RH 量程-40℃~+120℃
 * @property noiseLevel 噪声：模拟量 2 系数 0.1 单位 dB 量程 30dB~120dB
 * @property pm10 PM10：模拟量 1 系数 1 单位μg/m³ 量程 0-1000μg/m3
 * @property pm2Point5 PM2.5：模拟量 2 系数 1 单位μg/m³ 量程 0-1000μg/m3
 * @property airPressureValue 大气压力：模拟量 2 系数 0.1 单位 kPa 量程 0-120kPa
 * @property illuminationValue 光照度：32 位无符号整型 系数 1 单位 Lux 量程 0~20 万 Lux
 * @property instantRainfallValue 瞬时雨量：模拟量 1 系数 0.2 单位 mm 量程无
 * @property currentRainfallValue 当前雨量：模拟量 2 系数 0.2 单位 mm 量程无
 * @property dailyRainfallValue 日雨量：模拟量 2 系数 0.2 单位 mm 量程无
 * @property cumulativeRainfallValue 累积雨量 32 位无符号整型 系数 0.2 单位 mm 量程无
 * @property insertTimestamp 数据插入时间戳
 * @property insertTime 数据插入字符串时间
 */
@Document("ENV_MONITORING")
data class EnvMonitoringDocument(
    @Id
    val id: String? = null,
    val deviceId: Int,
    val coordinateType: CoordinateTypeEnum,
    val lat: Float,
    val lng: Float,
    val relayStatus: String,
    var windSpeedValue: Float = 0F,
    var windPowerOutput: Float = 0F,
    var windDirectionAngle: WindDirectionAngleEnum? = null,
    var windDirectionAngle360: Float = 0F,
    var airTemperatureValue: Float = 0F,
    var airHumidityValue: Float = 0F,
    var noiseLevel: Float = 0F,
    var pm10: Float = 0F,
    var pm2Point5: Float = 0F,
    var airPressureValue: Float = 0F,
    var illuminationValue: Long = 0,
    var instantRainfallValue: Float = 0F,
    var currentRainfallValue: Float = 0F,
    var dailyRainfallValue: Float = 0F,
    var cumulativeRainfallValue: Float = 0F,
    var co2: Float = 0F,
    val insertTimestamp: Long = System.currentTimeMillis(),
    val insertTime: String = DateUtil.formatDateTime(DateTime(insertTimestamp))
)
